
//
// !!!修改文件后调用 npm run buildJs 生成 ui-utils-all.js
//

"use strict";

import jQuery from 'jquery';
import { uiUtils } from "./ui-utils-core";
import { globalUtils } from '../global-utils/global-utils-all';

/* SOURCE-CODE-START */

/**
 * @namespace uiUtils-datePicker
 */

var _datePicker = {};
uiUtils.datePicker = _datePicker;
var DATA_TYPE_DATE_TEXT = 'dateText';

/**
 * @memberof uiUtils-datePicker
 * @description 初始日期时间
 * @param {jQuery} jqElement 
 * @param {*} [opts] - 方法 $().daterangepicker([arg]) 的参数
 * @returns {jQuery}
 */
_datePicker.init = function (jqElement, opts) {
  if (globalUtils.isNullOrUndefined(jqElement)) {
    throw new Error('argument#0 "jqElement" is null/undefined');
  }

  opts = globalUtils.emptyObjectIfNullOrUndefined(opts);
  var initOpts = {
    // 仅显示开始日期
    singleDatePicker: true,
    // 不自动更新输入框
    autoUpdateInput: false
  };

  var dataType = jqElement.attr(globalConfig.dataTypeAttributeName);
  if (dataType === 'dateText') {
    initOpts.locale = $['daterangepicker-date-locale'];
  } else {
    initOpts.locale = $['daterangepicker-dateTime-locale'];
    initOpts.timePicker = true;
    initOpts.timePicker24Hour = true;
  }

  var newOpts = globalUtils.mergeObjects(initOpts, opts);
  jqElement.daterangepicker(newOpts);

  // 点击日期弹出框"确定"后更新输入框的值
  jqElement.on('apply.daterangepicker', function (ev, picker) {
    var dateText = picker.startDate.format(initOpts.locale.format);
    jqElement.val(dateText);
  });

  jqElement.on('cancel.daterangepicker', function (ev, picker) {
    jqElement.val('');
  });

  return jqElement;
};

_datePicker.uiData = {};
uiData.Model.config.initDataHandlers.dateText = _datePicker.uiData;
uiData.Model.config.initDataHandlers.dateTimeText = _datePicker.uiData;

/**
 * @description 获取日期
 * @param {Element[]} elements DOM元素
 * @param {boolean} skipNull 是否跳过 null 值
 * @returns {*}
 */
_datePicker.uiData.getValue = function (elements, skipNull) {
  var jqElement = jQuery(elements[0]);
  var datePicker = jqElement.data('daterangepicker');
  var momentDate = datePicker.startDate;
  var date = momentDate.toDate();

  if (globalUtils.isNullOrUndefined(date) || !globalUtils.isNotEmptyString(jqElement.val())) {
    return null;
  }

  var dataType = jqElement.attr(globalConfig.dataTypeAttributeName);
  var result;

  if (dataType === DATA_TYPE_DATE_TEXT) {
    result = globalUtils.formatDateWithZone(date);
  } else {
    result = globalUtils.formatDateTimeWithZone(date);
  }

  return result;
};

/**
 * @description 设置日期
 * @param {Element[]} elements DOM元素
 * @param {*} value 值
 * @param {boolean} defaultNull 是否默认 null 值
 */
_datePicker.uiData.setValue = function (elements, value, defaultNull) {
  var jqElement = jQuery(elements[0]);

  if (globalUtils.isNullOrUndefined(value)) {
    jqElement.val('');
  } else {
    var dataType = jqElement.attr(globalConfig.dataTypeAttributeName);
    var date;

    // 获取日期对象
    if (globalUtils.isNullOrUndefined(value) || (value instanceof Date)) {
      date = value;
    } else if (dataType === DATA_TYPE_DATE_TEXT) {
      date = globalUtils.parseDateWithZone(value);
    } else {
      date = globalUtils.parseDateTimeWithZone(value);
    }

    var datePicker = jqElement.data('daterangepicker');
    var dateFormat;

    // 获取日期格式
    if (dataType === DATA_TYPE_DATE_TEXT) {
      dateFormat = $['daterangepicker-date-locale'].format;
    } else {
      dateFormat = $['daterangepicker-dateTime-locale'].format;
    }

    var dateText = moment(date).format(dateFormat);
    // 更新输入框的值
    jqElement.val(dateText);
    // 更新日期选择器控件的开始日期和结束日期
    datePicker.setStartDate(date);
    datePicker.setEndDate(date);
  }
};


/* SOURCE-CODE-END */

export { uiUtils, _datePicker };
